
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package videogest;

//import com.mysql.jdbc.Statement;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import persistencia.persistenciaFacturas;


/**
 *
 * @author Jerónimo Trigueros 14/04/2011
 */
    public class FacturaProductos extends Factura{
       /*
        * Atributos de la clase FacturaProductos
        */
        private String CIFProveedor;
        private  Date fecha = null;
        //FacturaProcutos tendrá una lista de productos (facturaSuministros no)
        List<Producto> productos;
        //creamos un tipo DateFormat para crear el formato que queremos que tenga la fecha introducida
        private DateFormat df = new SimpleDateFormat("dd/MM/yyyy");

    public FacturaProductos(Date fechaString, List<Producto> productos, float TotalAPagar, String CIFProveedor) throws FileNotFoundException, IOException
     {
        //Codigo.Factura es el enum que utilizamos para leer el código de un archivo u otro, en este caso de codigosFactura.txt
        super(Codigo.Factura, TotalAPagar);
        this.productos = productos;
        this.fecha = fechaString;
        this.CIFProveedor = CIFProveedor;
     }

    public FacturaProductos(String codigo, Date fechaString, List<Producto> productos, float TotalAPagar, String CIFProveedor) throws FileNotFoundException, IOException
    {
        super(codigo, TotalAPagar);
        this.productos = productos;
        this.fecha = fechaString;
        this.CIFProveedor = CIFProveedor;
    }

    public String getCIFProveedor() {
        return CIFProveedor;
    }

    public void setCIFProveedor(String CIFProveedor) {
        this.CIFProveedor = CIFProveedor;
    }

    public Date getFecha()
    {
        return fecha;
    }
       
    public void RegistrarProductos()
    {}



    public List<Producto> getProductos() {
        return productos;
    }

    public void setProductos(List<Producto> productos) {
        this.productos = productos;
    }


    public void mostrarProductos()
    {
        //muestro todos los productos de la lista "productos"
        for(Producto p:productos)
        {
            //tengo que comprobar si el producto es una película o un videojuego
            if(p instanceof Pelicula)
            {
                Pelicula p2 = (Pelicula)p;
                //utilizo el método sobreescrito toString de cada objeto del tipo Pelicula
                System.out.println(p2);
                System.out.print("\n");
            }
            else if(p instanceof Videojuego)
            {
                Videojuego p2 = (Videojuego)p;
                //utilizo el método sobreescrito toString de cada objeto del tipo Pelicula
                System.out.println(p2);
                System.out.print("\n");
            }
        }
    }


    @Override
    public String toString(){
       //el format me pasa a string el objeto date para poder mostrarlo adecuadamente
       
        String cad="\n";
        cad += "================================================\n";
        cad += "|            INFORMACION DE FACTURA \n";
        cad += "================================================\n";
        cad += "|-- Codigo factura: "+this.getCodigoFactura()+"\n";
        cad += "|-- Fecha: "+df.format(this.getFecha())+"\n";
        cad += "|-- CIF del proveedor: "+this.getCIFProveedor()+"\n";
        cad += "|-- Productos: "+this.getProductos()+"\n";
        cad += "|-- Total a pagar: "+super.getTotalAPagar()+ " Euros\n";
        cad += "================================================\n";
        return cad;
   }

   //2 facturas nunca podrán tener el mismo código
    @Override
    public boolean  equals(Object o){
       boolean res=false;
       if(o instanceof FacturaProductos){
           FacturaProductos fac=(FacturaProductos)o;
           if(this.getCodigoFactura().compareTo(fac.getCodigoFactura())==0){
               res=true;
           }
       }
       return res;
   }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 41 * hash + (this.fecha != null ? this.fecha.hashCode() : 0);
        return hash;
    }


    public static FacturaProductos dameFacturaProductos(String codigo) throws IOException, ParseException {

       
        return persistenciaFacturas.dameFacturasProductor(codigo);
    }
    
    public static List<Producto> dameProductosFactura(String codigofactura) throws FileNotFoundException, IOException, ParseException
    {
       
        return persistenciaFacturas.dameProductosFactura(codigofactura);
    }

    @Override
    public void alta() {
        persistenciaFacturas.alta(this);

    }


}

